<!doctype html>
<html xml:lang="zh-CN" lang="zh-CN">

<head>
        <link rel="canonical" href="https://v2rayjichang.github.io/news/article-95877.htm" />
    <!--====== Required meta tags ======-->
    <meta charset="utf-8">
    <meta http-equiv="x-ua-compatible" content="ie=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <title>C语言 模拟实现strlen函数详解_C 语言</title>
        <meta name="description" content="目录  前言 一.strlen函数的介绍  1.strlen函数的声明 2.strlen函数的简单运用 3.注意事项  二.三种实现strlen函数的方法  1.计数器的方法 2.递归方法 3.指针-" />
        <link rel="icon" href="/assets/website/img/surfboardnode/favicon.ico" type="image/x-icon"/>

    <meta name="author" content="V2ray免费机场 节点订阅中文官网">
    <meta property="og:type" content="article" />
    <meta property="og:url" content="https://v2rayjichang.github.io/news/article-95877.htm" />
    <meta property="og:site_name" content="V2ray免费机场 节点订阅中文官网" />
    <meta property="og:title" content="C语言 模拟实现strlen函数详解_C 语言" />
    <meta property="og:image" content="https://v2rayjichang.github.io/uploads/20240709-1/72cbe9345c1158418113b8fae7ef589c.webp" />
        <meta property="og:release_date" content="2025-04-14T08:03:54" />
    <meta property="og:updated_time" content="2025-04-14T08:03:54" />
        <meta property="og:description" content="目录  前言 一.strlen函数的介绍  1.strlen函数的声明 2.strlen函数的简单运用 3.注意事项  二.三种实现strlen函数的方法  1.计数器的方法 2.递归方法 3.指针-" />
        
    <meta name="applicable-device" content="pc,mobile" />
    <meta name="renderer" content="webkit" />
    <meta name="force-rendering" content="webkit" />
    <meta http-equiv="Cache-Control" content="no-transform" />
    <meta name="robots" content="max-image-preview:large" />
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <meta name="apple-mobile-web-app-title" content="C语言 模拟实现strlen函数详解_C 语言">
    <meta name="format-detection" content="telephone=no">

    <link rel="dns-prefetch" href="https:/www.googletagmanager.com">
    <link rel="dns-prefetch" href="https://www.googleadservices.com">
    <link rel="dns-prefetch" href="https://www.google-analytics.com">
    <link rel="dns-prefetch" href="https://pagead2.googlesyndication.com">
    <link rel="dns-prefetch" href="https://cm.g.doubleclick.net">
    
    <!--====== Bootstrap css ======-->
    <link rel="stylesheet" href="/assets/website/css/surfboardnode/bootstrap.min.css">
    <!--====== Slick css ======-->
    <link rel="stylesheet" href="/assets/website/css/surfboardnode/slick.css">
    <!--====== Magnific Popup css ======-->
    <link rel="stylesheet" href="/assets/website/css/surfboardnode/magnific-popup.css">
    <!--====== Line Icons css ======-->
    <link rel="stylesheet" href="/assets/website/css/surfboardnode/LineIcons.css">
    <!--====== Default css ======-->
    <link rel="stylesheet" href="/assets/website/css/surfboardnode/default.css">
    <!--====== Style css ======-->
    <link rel="stylesheet" href="/assets/website/css/surfboardnode/style.css">
    <!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-LMZ4WN7LCM"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'G-LMZ4WN7LCM');
</script>
    <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-3332997411212854"
     crossorigin="anonymous"></script>
</head>

<body data-page="detail">
    <!--====== HEADER ONE PART START ======-->
    <header class="header-area">
        <div class="navbar-area navbar-one navbar-transparent">
    <div class="container">
        <div class="row">
            <div class="col-lg-12">
                <nav class="navbar navbar-expand-lg">
                    <a class="navbar-brand" href="/">
                                        <span>
                        V2ray免费机场                    </span>
                                        </a>
                    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarOne" aria-controls="navbarOne" aria-expanded="false" aria-label="Toggle navigation">
                        <span class="toggler-icon"></span>
                        <span class="toggler-icon"></span>
                        <span class="toggler-icon"></span>
                    </button>
                    <div class="collapse navbar-collapse sub-menu-bar" id="navbarOne">
                        <ul class="navbar-nav m-auto">
                                                        <li class="nav-item">
                                <a href="/">首页</a>
                            </li>
                                                        <li class="nav-item">
                                <a href="/free-nodes/">免费节点</a>
                            </li>
                                                        <li class="nav-item">
                                <a href="/paid-subscribe/">推荐机场</a>
                            </li>
                                                        <li class="nav-item">
                                <a href="/news/">新闻资讯</a>
                            </li>
                                                        <li class="nav-item">
                                <a href="/client.htm">客户端</a>
                            </li>
                                                    </ul>
                    </div>
                </nav> <!-- navbar -->
            </div>
        </div> <!-- row -->
    </div> <!-- container -->
</div>
        <div id="home" class="header-content-area d-flex align-items-center list" style="height:450px;">
            <div class="container">
                <div class="row">
                    <div class="col-lg-12">
                        <div class="header-wrapper">
                            <div class="header-content">
                                <h1 class="header-title">C语言 模拟实现strlen函数详解_C 语言</h1>
                                <p class="text nav">
                                    <a href="/">首页</a> / <a href="/news/">新闻资讯</a> / <span>正文</span>
                                </p>
                            </div> <!-- header content -->
                            <div class="header-image d-none d-lg-block">
                                <div class="image">
                                    <img src="/assets/website/img/surfboardnode/header.png" alt="Header">
                                </div>
                            </div>
                        </div>
                    </div>
                </div> <!-- row -->
            </div> <!-- container -->
            <div class="header-shape">
                <img src="/assets/website/img/surfboardnode/header-shape.svg" alt="shape">
            </div> <!-- header-shape -->
        </div> <!-- header content area -->
    </header>
    <!--====== HEADER ONE PART ENDS ======-->
    <!--====== ABOUT THREE PART START ======-->
    <section id="about" class="about-area pt-70 pb-100">
        <div class="container">
            <div class="row">
                <div class="col-md-9">
                                    <input type="hidden" id="share-website-info" data-name="Clash Node官网订阅站" data-url="https://clashnode.github.io">
                  				  				  				<div id="navCategory"> <h5 class="catalogue">目录</h5> <ul class="first_class_ul"> <li><a href="#_label0" rel="nofollow">前言</a></li> <li><a href="#_label1" rel="nofollow">一.strlen函数的介绍</a></li> <ul class="second_class_ul"> <li><a href="#_lab2_1_0" rel="nofollow">1.strlen函数的声明</a></li> <li><a href="#_lab2_1_1" rel="nofollow">2.strlen函数的简单运用</a></li> <li><a href="#_lab2_1_2" rel="nofollow">3.注意事项</a></li> </ul> <li><a href="#_label2" rel="nofollow">二.三种实现strlen函数的方法</a></li> <ul class="second_class_ul"> <li><a href="#_lab2_2_3" rel="nofollow">1.计数器的方法</a></li> <li><a href="#_lab2_2_4" rel="nofollow">2.递归方法</a></li> <li><a href="#_lab2_2_5" rel="nofollow">3.指针-指针的方法</a></li> </ul> </ul> </div> <p class="maodian"><a name="_label0" rel="nofollow"></a></p> <h2>前言</h2> <p>用C语言模拟实现strlen函数，我这里有三种方法，快来看看跟你用的方法是否是一样。</p> <p class="maodian"><a name="_label1" rel="nofollow"></a></p> <h2>一.strlen函数的介绍</h2> <p class="maodian"><a name="_lab2_1_0" rel="nofollow"></a></p> <h3>1.strlen函数的声明</h3> <blockquote> <p>size_t strlen ( const char * str )；</p> </blockquote> <p>这里函数的返回值为无符号整形（size_t），传入的是一个常量char*类型的指针。</p> <p class="maodian"><a name="_lab2_1_1" rel="nofollow"></a></p> <h3>2.strlen函数的简单运用</h3> <p>用strlen函数可以求出字符串的长度</p> <div class="ay1code"> <pre class="brush:cpp;">#include&lt;stdio.h&gt;  #include&lt;string.h&gt;  int main()  {  	char str[] = "qwerty";  	int ret = strlen(str);  	printf("字符串的长度 = %d\n", ret);  	return 0;  }</pre> </div> <p>代码运行结果</p> <p style="text-align:center"><img fetchpriority="high" decoding="async" alt="" height="195" src="http://img.555519.xyz/uploads3/20220420/25fa862329644273eed9f73778c5611a.jpg"></p> <p class="maodian"><a name="_lab2_1_2" rel="nofollow"></a></p> <h3>3.注意事项</h3> <p>1.字符串是以 '\0' 作为结束标志，strlen函数返回的是在字符串中 '\0' 前面出现的字符个数（不包含 '\0' )。</p> <p>2.参数指向的字符串必须要以 '\0' 结束。</p> <p>如果不是以'\0'结束，输出结果将是一个随机值，例如：</p> <div class="ay1code"> <pre class="brush:cpp;">#include&lt;stdio.h&gt;  #include&lt;string.h&gt;     int main()  {  	char str[] = { 'a', 'b', 'c' };//这里没有以'\0'结束  	int ret = strlen(str);  	printf("字符串的长度 = %d\n", ret);  	return 0;  }</pre> </div> <p>代码运行结果</p> <p style="text-align:center"><img decoding="async" alt="" height="182" src="http://img.555519.xyz/uploads3/20220420/63391dc579c23a54f3aea16d975d209f.jpg"></p> <p> 其实这个代码的修改方法也很简单，例如：</p> <p>方法1</p> <div class="ay1code"> <pre class="brush:cpp;">#include&lt;stdio.h&gt;  #include&lt;string.h&gt;     int main()  {  	char str[] = { 'a', 'b', 'c', '\0'};  	int ret = strlen(str);  	printf("字符串的长度 = %d\n", ret);  	return 0;  }</pre> </div> <p>方法2（如果一个数组没存满的话后面的值默认存0，而'\0'的ASCII码值就是0）</p> <div class="ay1code"> <pre class="brush:cpp;">#include&lt;stdio.h&gt;  #include&lt;string.h&gt;     int main()  {  	char str[5] = { 'a', 'b', 'c'};  	int ret = strlen(str);  	printf("字符串的长度 = %d\n", ret);  	return 0;  }</pre> </div> <p>代码运行结果</p> <p style="text-align:center"><img decoding="async" alt="" height="180" src="http://img.555519.xyz/uploads3/20220420/f9c5aadf0ce7161c816e8f77cf7deb90.jpg"></p> <p>3.注意函数的返回值为size_t，是无符号的整形（ 易错 ）</p> <div class="ay1code"> <pre class="brush:cpp;">#include&lt;stdio.h&gt;  #include&lt;string.h&gt;     int main()  {  	if (strlen("abc") - strlen("abcdefg") &gt; 0)  	{  		printf("&gt;\n");  	}  	else  	{  		printf("&lt;=\n");  	}  	return 0;  }</pre> </div> <p>运行结果</p> <p style="text-align:center"><img loading="lazy" decoding="async" alt="" height="188" src="http://img.555519.xyz/uploads3/20220420/423f03e2eae9b4c1c8d5caa925bdba63.jpg"></p> <p>出现这个&gt;符号的结果的原因就在于函数的返回值为size_t，是无符号的整形，两个无符号整形的数字相减得到的还是一个无符号整形，虽然这两个字符串长度相减得到的是-3，但是编译器会把他当成无符号的整形，把-3当成无符号整形将会是一个很大的正整数，所以输出的结果是&gt;符号。（这是一个易错点）</p> <p class="maodian"><a name="_label2" rel="nofollow"></a></p> <h2>二.三种实现strlen函数的方法</h2> <p>三个方法的共同点：</p> <p>1.都要用const修饰指针，因为传址进来后只需要判断这字符串的长度，并不需要修改字符串的值，所以要用const修饰，这样使其更安全。</p> <p>2.都要用assert断言，断言传来的指针不能为空指针，因为空指针是不能被访问的。</p> <p class="maodian"><a name="_lab2_2_3" rel="nofollow"></a></p> <h3>1.计数器的方法</h3> <p>这是最普通的方法，创建一个计数器变量，然后就开始找'\0'，每经过一个字符，计数器就+1，直到找到'\0'为止。最后将计数器的值返回。</p> <div class="ay1code"> <pre class="brush:cpp;">#include&lt;stdio.h&gt;  #include&lt;assert.h&gt;     size_t my_strlen(const char* str)  {  	assert(str != NULL);//判断传入的指针是否为空指针  	int count = 0;//创建一个计数器变量，记录字符串的长度  	while (*str) //当找到'\0'的时候循环结束  	{                                                                                                                                                                                                                                                                                                                                                                                		count++;//记录字符串的长度  		str++;  	}  	return count;  }  int main()  {  	char str[] = "qwerty";  	int ret = my_strlen(str);  	printf("%d", ret);  	return 0;  }</pre> </div> <p class="maodian"><a name="_lab2_2_4" rel="nofollow"></a></p> <h3>2.递归方法</h3> <p>一时递归一时爽，一直递归一直爽。（讲解全在注释里面，嘻嘻）</p> <div class="ay1code"> <pre class="brush:cpp;">#include&lt;stdio.h&gt;  #include&lt;assert.h&gt;     size_t my_strlen(const char* str)  {  	assert(str != NULL);//判断传入的指针是否为空指针  	if (*str)//一直递归，直到找到'\0'为止  	{  		str++;  		return (1 + my_strlen(str));//递归，并返回1+记录字符串长度  	}  	return 0;  }  int main()  {  	char str[] = "qwerty";  	int ret = my_strlen(str);  	printf("%d", ret);  	return 0;  }</pre> </div> <p class="maodian"><a name="_lab2_2_5" rel="nofollow"></a></p> <h3>3.指针-指针的方法</h3> <p>我们都知道指针-指针的结果是他们之间元素的个数（因为这个我在指针初阶篇将过，嘻嘻），这个方法就是利用这个原理来写的。所以我们只用找到字符串首字符的地址和'\0'的地址，然后相减就可以得到字符串的长度了。</p> <div class="ay1code"> <pre class="brush:cpp;">#include&lt;stdio.h&gt;  #include&lt;assert.h&gt;     size_t my_strlen(const char* str)  {  	assert(str != NULL);//判断传入的指针是否为空指针  	const char* start = str;//创建一个存储首字符地址的指针，注意也要用const修饰，保持类型一致  	while (*str)//找'\0'的地址  	{  		str++;  	}  	return (str - start);//指针（'\0'的地址） - 指针（首字符的地址） = 中间字符的个数  }  int main()  {  	char str[] = "qwerty";  	int ret = my_strlen(str);  	printf("字符串的长度 = %d\n", ret);  	return 0;  }</pre> </div> <p>三种方法的运行结果都是一样的</p> <p style="text-align:center"><img loading="lazy" decoding="async" alt="" height="230" src="http://img.555519.xyz/uploads3/20220420/608b372923e280980b0eb18b300e1851.jpg"></p> 			                <div class="clearfix"></div>
                <div class="col-md-12 mt-5">
                                        <p>上一个：<a href="/news/article-95144.htm">动物防疫站打针需要什么（动物防疫打针收费吗）</a></p>
                                        <p>下一个：<a href="/news/article-95878.htm">【芜湖宠物狗|芜湖宠物狗信息】（芜湖的宠物店比较集中在哪里）</a></p>
                                    </div>
                                </div>
                <div class="col-md-3">
                    <div class="panel panel-default">
    <div class="panel-heading">
        <h3 class="panel-title">热门文章</h3>
    </div>
    <div class="panel-body">
        <ul class="p-0 x-0" style="list-style: none;margin: 0;padding: 0;">
                        <li class="py-2"><a href="/news/article-87725.htm" title="动物疫苗有哪些种类及作用及副作用（动物疫苗有哪些种类及作用及副作用）">动物疫苗有哪些种类及作用及副作用（动物疫苗有哪些种类及作用及副作用）</a></li>
                        <li class="py-2"><a href="/news/article-91108.htm" title="Java线程池深入浅出">Java线程池深入浅出</a></li>
                        <li class="py-2"><a href="/news/article-83404.htm" title="Spring Security核心类详解">Spring Security核心类详解</a></li>
                        <li class="py-2"><a href="/news/article-85569.htm" title="【TypeScript】TypeScript 与 JavaScript 有何不同？">【TypeScript】TypeScript 与 JavaScript 有何不同？</a></li>
                        <li class="py-2"><a href="/free-nodes/2025-3-28-free-subscribe-node.htm" title="V2ray免费机场 | 3月28日23M/S|免费Shadowrocket/Clash/V2ray/SSR订阅节点地址分享">V2ray免费机场 | 3月28日23M/S|免费Shadowrocket/Clash/V2ray/SSR订阅节点地址分享</a></li>
                        <li class="py-2"><a href="/free-nodes/2025-4-11-node-share.htm" title="V2ray免费VPN机场 | 4月11日19.3M/S|免费SSR/Shadowrocket/Clash/V2ray订阅节点地址分享">V2ray免费VPN机场 | 4月11日19.3M/S|免费SSR/Shadowrocket/Clash/V2ray订阅节点地址分享</a></li>
                        <li class="py-2"><a href="/free-nodes/2025-4-4-free-subscribe-node.htm" title="V2ray免费VPN机场 | 4月4日19.2M/S|免费SSR/Shadowrocket/V2ray/Clash订阅节点地址分享">V2ray免费VPN机场 | 4月4日19.2M/S|免费SSR/Shadowrocket/V2ray/Clash订阅节点地址分享</a></li>
                        <li class="py-2"><a href="/free-nodes/2025-4-8-free-subscribe-node.htm" title="V2ray免费VPN机场 | 4月8日21.8M/S|免费Clash/SSR/Shadowrocket/V2ray订阅节点地址分享">V2ray免费VPN机场 | 4月8日21.8M/S|免费Clash/SSR/Shadowrocket/V2ray订阅节点地址分享</a></li>
                        <li class="py-2"><a href="/free-nodes/2025-3-29-free-high-speed-nodes.htm" title="V2ray免费机场 | 3月29日21.9M/S|免费SSR/Shadowrocket/Clash/V2ray订阅节点地址分享">V2ray免费机场 | 3月29日21.9M/S|免费SSR/Shadowrocket/Clash/V2ray订阅节点地址分享</a></li>
                        <li class="py-2"><a href="/news/article-92153.htm" title="北京动物防疫站地址（北京动物疫病防控中心）">北京动物防疫站地址（北京动物疫病防控中心）</a></li>
                    </ul>
    </div>
</div>

<div class="panel panel-default">
    <div class="panel-heading">
        <h3 class="panel-title">归纳</h3>
    </div>
    <div class="panel-body">
        <ul class="p-0 x-0" style="list-style: none;margin: 0;padding: 0;">
                        <li class="py-2">
                <h4><span class="badge" style="float: right;">48</span> <a href="/date/2025-04/" title="2025-04 归档">2025-04</a></h4>
            </li>
                        <li class="py-2">
                <h4><span class="badge" style="float: right;">15</span> <a href="/date/2025-03/" title="2025-03 归档">2025-03</a></h4>
            </li>
                    </ul>
    </div>
</div>

                </div>
            </div>
        </div> <!-- container -->
    </section>
    <!--====== ABOUT THREE PART ENDS ======-->
        <!--====== FOOTER PART START ======-->
    <footer id="footer" class="footer-area">
        <div class="footer-copyright">
            <div class="container">
                <div class="row">
                    <div class="col-lg-12">
                        <div class="copyright text-center">
                                                <p>
                                                <a href="/">首页</a> |
                                                <a href="/free-nodes/">免费节点</a> |
                                                <a href="/paid-subscribe/">推荐机场</a> |
                                                <a href="/news/">新闻资讯</a> |
                                                <a href="/client.htm">客户端</a> |
                                                <a href="/about-us.htm">关于我们</a> |
                        <a href="/disclaimer.htm">免责申明</a> |
                        <a href="/privacy.htm">隐私申明</a> |
                        <a href="/sitemap.xml">网站地图</a>
                    </p>
                            <p class="text">V2ray免费机场 节点订阅中文官网 版权所有 Powered by WordPress</p>
                        </div> <!-- copyright -->
                    </div>
                </div> <!-- row -->
            </div> <!-- container -->
        </div> <!-- footer copyright -->
    </footer>
    <!--====== FOOTER PART ENDS ======-->
    <!--====== BACK TOP TOP PART START ======-->
    <a href="#" class="back-to-top"><i class="lni-chevron-up"></i></a>
    <!--====== BACK TOP TOP PART ENDS ======-->
    <!--====== jquery js ======-->
    <script src="/assets/website/js/frontend/surfboardnode/vendor/modernizr-3.6.0.min.js"></script>
    <script src="/assets/website/js/frontend/surfboardnode/vendor/jquery-1.12.4.min.js"></script>
    <!--====== Bootstrap js ======-->
    <script src="/assets/website/js/frontend/surfboardnode/bootstrap.min.js"></script>
    <script src="/assets/website/js/frontend/surfboardnode/popper.min.js"></script>
    <!--====== Images Loaded js ======-->
    <script src="/assets/website/js/frontend/surfboardnode/imagesloaded.pkgd.min.js"></script>
    <!--====== Scrolling Nav js ======-->
    <script src="/assets/website/js/frontend/surfboardnode/jquery.easing.min.js"></script>
    <script src="/assets/website/js/frontend/surfboardnode/scrolling-nav.js"></script>
    <!--====== Slick js ======-->
    <script src="/assets/website/js/frontend/surfboardnode/slick.min.js"></script>
    <!--====== Main js ======-->
    <script src="/assets/website/js/frontend/surfboardnode/main.js"></script>
    <script src="https://www.freeclashnode.com/assets/js/frontend/invite-url.js"></script>
    <script src="/assets/website/js/frontend/G.js"></script>
</body>

</html>